package com.elitel.frame.base.service;
/**
 * @description 设置服务查询字段服务接口
 * @author guoyanfei
 */
import com.elitel.frame.main.entity.BaseQueryfield;
import com.elitel.frame.main.entity.SysPrjservice;
import com.elitel.frame.main.entity.ext.BaseQueryfieldExt;
import com.elitel.frame.main.entity.ext.QueryFiled;
import com.elitel.frame.main.entity.vo.BaseQueryFieldVo;
import com.elitel.frame.main.entity.vo.PageRequestVo;
import com.elitel.frame.main.entity.vo.PageResponseVo;
import com.elitel.frame.main.entity.vo.QueryFieldVo;

import java.util.List;
import java.util.Set;

public interface BaseQueryfieldService {

	/**
	 * @description 通过dtConfigId查询所有表字段
	 * @param dtConfigId(表或视图标识)
	 * @return QueryFieldVo集合
	 * @author guoyanfei
	 */
	List<QueryFieldVo> getAllFieldBydtConfigId(String dtConfigId);

	/**
	 * @description 添加查询字段
	 * @param strFields(字段集合)
	 * @param serviceId(服务ID)
	 * @param serviceType(服务类型)
	 * @param grade(资源树服务分层的层级)
	 * @param paramType(参数类型:1动态参数,2固定参数)
	 * @return 插入结果
	 * @author guoyanfei
	 * @date 2017/11/24
	 */
	Integer insertBaseQueryfield(String strFields, String serviceId, Integer serviceType, String grade, Integer paramType);

    Integer addBaseQueryfieldBySqlConditionType(List<BaseQueryfield> baseQueryFieldList, Integer sqlConditionType);

	/**
	 * @Description 分页显示查询字段
	 *
	 * @param pr
	 * @return
	 * @author guoyanfei
	 */
	PageResponseVo<BaseQueryfield> getListByPage(
			PageRequestVo<BaseQueryfield> pr, String serviceId, Integer serviceType);

	/**
	 * @Description 批量删除查询字段配置
	 *
	 * @param guids(guid集合以@隔开)
	 * @return
	 * @author guoyanfei
	 */
	Integer deleteQueryfield(String guids);

	/**
	 * @description 修改查询字段信息表
	 * @return 修改结果
	 * @author guoyanfei
	 */
	Integer updateQueryfield(BaseQueryfield baseQueryfield);

	Integer batchUpdateQueryfieldList(List<BaseQueryfield> baseQueryfieldList);


	/**
	 * @description 通过服务ID和服务类型查询查询字段信息
	 * @param serviceId(服务ID)
	 * @param serviceType(服务类型)
	 * @return BaseQueryfield集合
	 * @author guoyanfei
	 */
	List<BaseQueryfield> getQueryFieldByServiceId(String serviceId, Integer serviceType);

	/**
	 * @description 通过服务ID和服务类型查询服务查询字段扩展信息
	 * @param serviceId(服务ID)
	 * @param serviceType(服务类型)
	 * @param grade(资源树服务层级)
	 * @return BaseQueryfieldExt实体
	 * @author guoyanfei
	 * @date 2017/11/16
	 */
	List<BaseQueryfieldExt> getQueryFieldListByServiceId(String serviceId, String serviceType, String grade, Integer paramType);

	/**
	 * <pre>getQueryFieldByParamCode(根据数据服务ID和参数Code获取参数字段详细)
	 * @author：FanWenquan
	 * @date：2018年2月27日 下午2:06:09
	 * @param dataservercode
	 * @param parmetercode
	 * @return</pre>
	 */
	BaseQueryfieldExt getQueryFieldByParamCode(String dataservercode, String parmetercode);

	/**
	 * 根据主键查询
	 *
	 * @param fieldaddonsguid
	 * @return
	 */
	BaseQueryfield getQueryFieldByGuid(String fieldaddonsguid);

	/**
	 * 根据主键查详细服务
	 *
	 * @param guid
	 * @return
	 */
	SysPrjservice getServiceByFieldGuid(String guid);

	/**
	 * TODO: 批量添加查询字段
	 *
	 * @param baseQueryfields
	 * @return
	 */
	Integer batchInsertBaseQueryField(List<BaseQueryfield> baseQueryfields);

	/**
	 * show 通过服务ID删除其查询字段信息
	 *
	 * @param serviceId(服务ID)
	 * @return 删除条数
	 * @author guoyanfei
	 * @date 2017/11/08
	 */
	Integer deleteQueryfieldByServiceId(String serviceId);

	/**
	 * @description 批量保存必填字段
	 * @param list
	 * @return
	 * @author mls
	 */
    List<BaseQueryfield> saveQueryFiled(List<BaseQueryfield> list);

	/**
	 * 查询必填字段
	 * @param serviceCode
	 * @return
	 */
	void selectQueryFiled(String serviceCode,List<BaseQueryfieldExt> baseQueryfieldExts);


	/**
	 * @param serviceCode 
	 * @param queryFileds
	 * @return
	 */
	void selectSqlRequiredFields(String serviceCode, List<QueryFiled> queryFileds);
	
	Set<String> selectRequiredFieldsByServiceGuid(String guid);

	List<BaseQueryFieldVo> selectByServiceCodes(List<String> serviceCodes);

	List<BaseQueryFieldVo> selectExecuteByServiceCodes(List<String> serviceCodes);
}
